#953 MongoDB Support for Spring Cloud Task #958
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
MongoDB Support for Spring Cloud Task
Overview
This PR adds MongoDB repository support for Spring Cloud Task, following the same patterns as the existing JDBC implementation. Users can now choose MongoDB instead of relational databases for task execution storage.
Key Implementation
1. Auto-Configuration
File:
MongoTaskAutoConfiguration.javaAutomatically activates when MongoDB is configured:
spring.cloud.task.repository-type=mongodb2. Core Components
MongoTaskExecutionDaoMongoTaskExecutionDao.javaMongoTaskConfigurerMongoTaskConfigurer.javaMongoTaskRepositoryInitializerMongoTaskRepositoryInitializer.javaMongoLockRepositoryMongoLockRepository.java3. MongoDB Collections
Task execution information is stored across 5 collections:
4. Key Features
findAndModifyTechnical Implementation Details
1. Optional Dependency Pattern
MongoDB is declared as an optional dependency, allowing the library to work without MongoDB:
This requires
TaskExecutionDaoFactoryBeanto use reflection for MongoDB DAO creation:Pros:
Cons:
2. Sequence Management
MongoDB doesn't have auto-increment, so we use atomic
findAndModify:3. Distributed Lock Mechanism
MongoLockRepositoryimplements Spring Integration'sLockRegistryinterface:Key Improvements:
tryLock(long time, TimeUnit unit)timeout (was missing in initial implementation)Testing
Test Coverage
MongoTaskExecutionDaoTestsMongoLockRepositoryTestsMongoTaskAutoConfigurationTestsMongoTaskConfigurerTestsMongoTaskRepositoryInitializerTestsTotal: 84 tests passing
Features
BaseTaskExecutionDaoTestCasesfor same test coverage as JDBCRunning Tests
Usage Examples
Basic Configuration
Single Instance Execution (Distributed Lock)
Application Code